/**
 * 1. 闭包 自执行函数
 * 2. require.js AMD
 * 3. sea.js CMD
 * 4. node.js common.js
 * 5. es6 es module
 * 6. umd amd+cmd+es+module
 * 
 * 
 * 
 * 
 * 1.在node.js中，每一个单独的文件都是一个单独的模块 变量都是私有变量
 * 2.通过require方法实现依赖管理，这个加载时同步的
 * 
 */

 /**
 * 执行过程
 * 1.找到这个文件
 * 2.读取此文件模块的内容
 * 3.把它封装到一个函数中执行
 * 4.执行后把模块的module.exports 赋给school
 *      模块实现缓存，当第一次加载一个模块之后，会缓存这个exports对象
 *      以后如果再次加载这个模块，就直接从缓存中取，不需要再次加载
 */
/**
 * 模块是一个普通对象 module
 * id: '.'
 * exports: {} 导出对象
 * parent: null 父模块
 * filename 当前模块的绝对路径
 * loaded: false 是否加载完成  
 * 
 */
let shool = require('./school')


// !function(exports, require, module, __filename, __dirname){
//     let name = 'zf';
//     let age = 9;
//     module.exports = {name, age}

//     return module.exports
// }()

console.log(module.paths)

// require

/**
 * node 内置的模块放在node.exe中
 * let fs = require('fs')
 * 
 * 文件模块分为三种类型 js json node
 *      1.自己写的，通过相对路径或绝对路径调用
 *      2.别人写的，通过node_modules中找
 */



/**
 * 当前模块的查找路径  全局模块路径
 * 会找到module.paths global module
 * 
 * 
 * %SystemRoot%\system32;E:\Python\Scripts\;E:\Python\;D:\Microsoft VS Code Insiders\bin;C:\Users\Administrator\AppData\Roaming\npm;D:\Fiddler
 */